Skip to main content

Promise와 async/await의 이해

작성일 : 2024.11.24

Promise의 개념에 대해 설명해주세요​

Promise는 비동기 연산의 상태를 나타내는 객체입니다. 비동기 처리가 진행중이면 pending, 성공이면 fulfilled, 실패면 rejected라는 상태값을 가집니다. Promise는 비동기 프로그램을 then과 catch의 체이닝을 통해, 보다 간결하게 표현할 수 있도록 ES6에서 새로 도입되었습니다.

Promise 등장 이전에는 어떤 방식으로 비동기 처리를 했는지 설명​

Promise 등장 이전에는 비동기 작업을 처리하는 함수에 성공 콜백과, 실패 콜백을 각각 넘겨서 완료 상태에 따른 처리를 했습니다. 이런 방식이다 보니, 두개 이상의 비동기 작업이 순서를 갖고 실행되어야 할 때, 콜백 함수 안에 또다른 콜백 함수가 점점 중첩되는 callback hell 현상이 발생하여, 코드 가독성 및 유지보수성 저하의 요인이 되곤 했습니다.

async-await에 대해 설명해주세요.​

Promise의 완료를 기다리기 위한 문법으로, async 키워드로 정의한 함수 내에서 호출되는 Promise 앞에 await 키워드를 쓰면, 해당 Promise가 완료될 때까지 코드의 실행을 일시 중단할 수 있습니다. 이를 통해 비동기 코드를 마치 동기 코드처럼 쉽게 작성할 수 있습니다.

async-await를 사용할 때 주의해야할 점​

await의 에러 핸들링은 반드시 try-catch 블록에서 해야합니다. 또한 await는 Promise가 완료될 때까지 함수의 실행을 중단하기 때문에, 실행흐름을 잘 고려하여 적재적소에 써야합니다. 예를 들어, 여러 비동기 작업이 순차적으로 진행될 필요가 없는 경우, await 대신 Promise.all 함수를 사용하는 것이 바람직합니다.